package com.zsh.config;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

import javax.servlet.http.HttpServletRequest;

public class AccessFilter extends ZuulFilter {
    @Override
    public String filterType() {
        //pre：可以在请求被路由之前调用
        //route：在路由请求时候被调用
        //post：在route和error过滤器之后被调用
        //error：处理请求时发生错误时被调用
        return "pre";
    }

    @Override
    public int filterOrder() {
        // 优先级为0，数字越大，优先级越低
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        //true代表生效，false代表不生效。那么什么情况下使用不生效呢，不生效干嘛还要写这个filter类呢？
        //其实是有用的，有时我们会动态的决定让不让一个filter生效，譬如我们可能根据Request里是否携带某个参数来判断是否需要生效，或者我们需要从上一个filter里接收某个数据来决定，再或者我们希望能手工控制是否生效
        return true;
    }

    @Override
    public Object run() {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();

        String url = request.getRequestURL().toString();
        if(url.contains("queryMenu")){
            context.setSendZuulResponse(false);
            context.setResponseStatusCode(401);
            return null;
        }

        return null;
    }
}
